#!/usr/bin/env ruby

LKP_SRC = ENV['LKP_SRC'] || File.dirname(File.dirname(File.realpath($PROGRAM_NAME)))

require "#{LKP_SRC}/lib/string_ext"
require "#{LKP_SRC}/lib/tests/stats"

# The result line in input is in format:
# [time] $type-torture:--- End of test: $result: arg=value arg=value ...
#
# $type and $result are essential for a test.
# And for now, we care about the value of arg onoff_interval
# which represents doing cpuhotplugs or not.
#
# 'LOCK_HOTPLUG' and 'FAILURE' both represent the test failed.
# but there is a problem:
# there's a bug in torture test code, so hotplug can't be considered as failure.
# and another patch is needed to use '.lock_hotplug',so remain the '.lock_hotplug'.
# finally after discussing uniform the output of stat:
# keep all it`s original state
# and we know 4 states temporaryly: success, success [debug], failure, lock_hotplug
#
# Input example:
# [  416.167904] spin_lock-torture:--- End of test: LOCK_HOTPLUG: nwriters_stress=4
#  nreaders_stress=0 stat_interval=60 verbose=1 shuffle_interval=3 stutter=5 shutdown_secs=0 onoff_interval=3 onoff_holdoff=30

stats = LKP::Stats.new
result = 'unknown'
type = 'unknown'
cpuhotplug = false

while (line = $stdin.gets)
  line = line.resolve_invalid_bytes

  case line
  when /^\[.*\] ([A-Za-z_]+)-torture.*End of test: (.*):.*onoff_interval=([0-9]+).*/
    type = $1
    result = ($2.downcase.delete ' ').gsub('[debug]', '')
    cpuhotplug = true unless $3.eql? '0'
    break
  end
end

stats.add (cpuhotplug ? 'cpuhotplug-' : '') + type, result

stats.dump('success' => 'pass', 'failure' => 'fail')
